package BloodTimeHybernateTest;

import java.util.Iterator;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;

import BloodTimeHybernateDO.CiudadArticuloDO;
import BloodTimeHybernateDO.CiudadDO;
import BloodTimeHybernateDO.PocionDO;
import BloodTimeHybernateDO.VampiroArticuloDO;
import BloodTimeHybernateDO.VampiroDO;
/**
 * 
 * @author Manuel A. Quintero V.
 * 
 */

public class TestPocion {

	public static void main(String[] args) {
		Configuration configuration = new AnnotationConfiguration();
		configuration.configure("/BloodTimeHybernateDO/hibernate.cfg.xml");
		SessionFactory sessionFactory = configuration.buildSessionFactory();
		
		// ---------------------------------------------------------------
        // Insert
        // ---------------------------------------------------------------
		Session session = sessionFactory.openSession();
		session.beginTransaction();
		PocionDO pocion;
		VampiroDO vampiro;
		CiudadDO ciudad;
		for(int i=1;i<=5;i++){
			pocion = new PocionDO();
			pocion.setNombre("nombre"+i);
			pocion.setDescripcion("descripcion"+i);
			pocion.setPrecioCompra(i);
			pocion.setPrecioVenta(i);
			pocion.setAtributoObjetivo(i);
			pocion.setCantMejoraAtributoObj(i);
			
			vampiro=new VampiroDO();
			vampiro.setAlias("alias"+i);
			ciudad=new CiudadDO();
			ciudad.setNombre("ciudad"+i);
			
			for (int j = 1; j <=5; j++) {
				VampiroArticuloDO vampiroArticulo = new VampiroArticuloDO();
				vampiroArticulo.setEquipado(true);
				vampiroArticulo.setArticuloId(pocion);
				vampiroArticulo.setVampiroId(vampiro);
				pocion.getVampiroArticuloList().add(vampiroArticulo);
				session.save(vampiroArticulo);
				
				CiudadArticuloDO ciudadArticulo = new CiudadArticuloDO();
				ciudadArticulo.setArticuloId(pocion);
				ciudadArticulo.setCiudadId(ciudad);
				pocion.getCiudadArticuloList().add(ciudadArticulo);
				session.save(ciudadArticulo);
			}
			session.save(pocion);
			session.save(vampiro);
			session.save(ciudad);
		}
		session.getTransaction().commit();
		session.close();
		
		// ---------------------------------------------------------------
        // Load
        // ---------------------------------------------------------------

		session = sessionFactory.openSession();
		session.beginTransaction();

		pocion = null;
		pocion = (PocionDO) session.load(PocionDO.class, 1);
		System.out.println("pocion.nombre: " + pocion.getNombre());
		
		// ---------------------------------------------------------------
        // Update
        // ---------------------------------------------------------------
		pocion.setNombre("otro nombre");

		session.getTransaction().commit();
		session.close();

		// ---------------------------------------------------------------
        // Query
        // ---------------------------------------------------------------

		session = sessionFactory.openSession();
		session.beginTransaction();

		pocion = null;
		pocion = (PocionDO) session.createQuery("FROM PocionDO AS p WHERE p.id = '2'").uniqueResult();
		System.out.println("pocion.nombre: " + pocion.getNombre());

			
		// ---------------------------------------------------------------
        // Delete
        // ---------------------------------------------------------------
		Iterator<CiudadArticuloDO> ite = pocion.getCiudadArticuloList().iterator();
		while(ite.hasNext()){
			CiudadArticuloDO ciudadarticulo = (CiudadArticuloDO) ite.next();
			ciudadarticulo.setArticuloId(null);
		}
		Iterator<VampiroArticuloDO> ite1 = pocion.getVampiroArticuloList().iterator();
		while(ite.hasNext()){
			VampiroArticuloDO vampiroarticulo = (VampiroArticuloDO) ite1.next();
			vampiroarticulo.setArticuloId(null);
		}
		session.delete(pocion);

		session.getTransaction().commit();
		session.close();

		// ---------------------------------------------------------------
        // List
        // ---------------------------------------------------------------

		session = sessionFactory.openSession();
		session.beginTransaction();
		List<PocionDO> list = session.createCriteria(PocionDO.class).list();
		for (PocionDO art : list) {
			System.out.println("pocion.nombre: "+art.getNombre());
		}

		session.getTransaction().commit();
		session.close();

	}

}
